<?php

// ------------------------------------------------------------------------
// |@Author       : Jarmin <topextend@qq.com>
// |@----------------------------------------------------------------------
// |@Date         : 2025-05-04 23:35:19
// |@----------------------------------------------------------------------
// |@LastEditTime : 2025-05-04 23:43:19
// |@----------------------------------------------------------------------
// |@LastEditors  : Jarmin <topextend@qq.com>
// |@----------------------------------------------------------------------
// |@Description  :
// |@----------------------------------------------------------------------
// |@FilePath     : ListenerTrait.php
// |@----------------------------------------------------------------------
// |@Copyright (c) 2025 http://www.ladmin.cn All Rights Reserved.
// ------------------------------------------------------------------------
declare (strict_types=1);

namespace think\admin\traits;

/**
 * 事件监听特性
 * 用于 Service 层实现事件监听
 */
trait ListenerTrait
{
    /**
     * 触发事件
     * @param string $event 事件名称
     * @param mixed $params 事件参数
     * @return mixed
     */
    protected function trigger(string $event, mixed $params = null): mixed
    {
        return $this->app->event->trigger($event, $params);
    }

    /**
     * 监听事件
     * @param string $event 事件名称
     * @param callable $callback 回调函数
     * @param bool $once 是否只监听一次
     * @return void
     */
    protected function listen(string $event, callable $callback, bool $once = false): void
    {
        if ($once) {
            $this->app->event->once($event, $callback);
            return;
        }
        $this->app->event->listen($event, $callback);
    }

    /**
     * 取消监听
     * @param string $event 事件名称
     * @return void
     */
    protected function remove(string $event): void
    {
        $this->app->event->remove($event);
    }
}
